原作者:张华
原文链接
openstack的扩展API有两类:
1) resource extension, 可参见:$nova/nova/api/openstack/compute/contrib/server_password.py, 需实现get_resource方法,如:
2) controller extension, 可参见:$nova/nova/api/openstack/compute/contrib/server_password.py, 需实现get_controller_extensions方法,如:
但是,如果不是新建,而是想扩展已存在的resource extension和extroller extension呢,如下的例子:
1)加@wsgi.extends(action=’resize’)修饰符即可
2)记得加yield,让它成为一个生成器,这样就会先执行我们自己扩展的extension api,然后再去执行原有的api,相当于继承吧。
因为上面是一个生成器,可以这样调用:
[python]self.controller.create(req, body).next()[/python]
或者用for循环调用。另外在单元测试时使用assertRaises时调用它时传给Mock的应该是一个函数地址,所以下面的调用在next后面不要加括号哦。
[python]self.assertRaises(exc.HTTPBadRequest, self.controller.create(req, body).next)[/python]
测试: